package study.ws.area.client;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;

import study.ws.area.pojo.Area;
import study.ws.area.service.impl.AreaServiceImpl;


/**  
* @Name: AreaClient
* @Description: 区域信息查询客户端
* @Author: 李超
* @Create Date: 2017-01-07
*/
public class AreaClient {
	
	public static void main(String[] args) throws Exception {
		//创建webservice服务访问的url对象
		URL url = new URL("http://127.0.0.1:10001/area") ;
		//创建ws服务的限定名
		QName qName = new QName("http://impl.service.area.ws.study/", "AreaServiceImplService") ;
		//创建服务视图对象
		Service service = Service.create(url, qName) ;
		//通过服务视图对象，获取portType对象
		AreaServiceImpl areaServiceImpl = service.getPort(AreaServiceImpl.class) ;
		//调用服务方法，获取服务端响应的xml数据
		String requestXml = createRequestXml("1.", 1, 10) ;
		String responseXml = areaServiceImpl.queryArea(requestXml) ;
		//解析服务端响应的xml数据
		List<Area> list = parseResponseXml(responseXml) ;
		for (Area area : list) {
			System.out.println(area);
		}
	}
	
	/**  
	* @Name: createRequestXml（方法的名称）
	* @Description: 将查询条件转换成xml数据
	* @Author: 李超（作者）
	* @Version: V1.00 （版本号）
	* @Create Date: 2017-01-07 （创建日期）
	* @Parameters: String parentID 父级节点
	* 			   int start 起始记录的序号
	* 			   int end 结束记录的序号
	* @Return: String 返回xml请求数据（返回值，如果没有，填写为“无”）
	*/
	private static String createRequestXml(String parentID, int start, int end) {
		//创建dom4j文档对象
		Document document = DocumentHelper.createDocument() ;
		//创建root节点
		Element root = DocumentHelper.createElement("queryarea") ;
		document.setRootElement(root) ;
		//创建xml节点,存放查询条件
		root.addElement("parentid").addText(parentID) ;
		root.addElement("start").addText(String.valueOf(start)) ;
		root.addElement("end").addText(String.valueOf(end)) ;
		return document.asXML() ;
	}
	
	/**  
	* @Name: parseResponseXml（方法的名称）
	* @Description: 将服务端返回的xml数据解析成java对象集合
	* @Author: 李超（作者）
	* @Version: V1.00 （版本号）
	* @Create Date: 2017-01-07 （创建日期）
	* @Parameters:String responseXml 服务端返回的xml数据
	* @Return: List<Area> 返回java对象集合（返回值，如果没有，填写为“无”）
	*/
	private static List<Area> parseResponseXml(String responseXml) throws DocumentException {
		List<Area> areaList = null ;
		//创建dom4j文档对象
		Document document = DocumentHelper.parseText(responseXml) ;
		//解析xml数据
		@SuppressWarnings("unchecked")
		List<Node> nodes = document.selectNodes("//areas/area") ;
		if(nodes != null && nodes.size() > 0) {
			areaList = new ArrayList<>() ;
			for (Node node : nodes) {
				Area area = new Area() ;
//				String areaID = node.selectSingleNode("areaid").getText() ;
//				String areaName = node.selectSingleNode("areaname").getText() ;
//				String parentID = node.selectSingleNode("parentid").getText() ;
//				String areaLevel = node.selectSingleNode("arealevel").getText() ;
				Element element = (Element) node ;
				String areaID = element.elementText("areaid") ;
				String areaName = element.elementText("areaname") ;
				String parentID = element.elementText("parentid") ;
				String areaLevel = element.elementText("arealevel") ;
				area.setAreaID(areaID) ;
				area.setAreaName(areaName) ;
				area.setAreaLevel(areaLevel) ;
				area.setParentID(parentID) ;
				areaList.add(area) ;
			}
		}
		return areaList;
	}
	
	
	
	
}
